<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace Common\Api;
class CategoryApi
{
    /**
     * 获取分类信息并缓存分类
     * @param  integer $id 分类ID
     * @param  string $field 要获取的字段名
     * @return string         分类信息
     */
    public static function get_category($id, $field = null)
    {
        static $list;

        /* 非法分类ID */
        if (empty($id) || !is_numeric($id)) {
            return '';
        }

        /* 读取缓存数据 */
        if (empty($list)) {
            $list = S('sys_category_list');
        }

        /* 获取分类名称 */
        if (!isset($list[$id])) {
            $cate = M('Category')->find($id);
            if (!$cate || 1 != $cate['status']) { //不存在分类，或分类被禁用
                return '';
            }
            $list[$id] = $cate;
            S('sys_category_list', $list); //更新缓存
        }
        return is_null($field) ? $list[$id] : $list[$id][$field];
    }

    /* 根据ID获取分类标识 */
    public static function get_category_name($id)
    {
        return get_category($id, 'name');
    }

    /* 根据ID获取分类名称 */
    public static function get_category_title($id)
    {
        return get_category($id, 'title');
    }

    /**
     * 获取参数的所有父级分类
     * @param int $cid 分类id
     * @return array 参数分类和父类的信息集合
     * @author huajie <banhuajie@163.com>
     */
    public static function get_parent_category($cid)
    {
        if (empty($cid)) {
            return false;
        }
        $cates = M('Category')->where(array('status' => 1))->field('id,title,pid')->order('sort')->select();
        $child = get_category($cid);    //获取参数分类的信息
        $pid = $child['pid'];
        $temp = array();
        $res[] = $child;
        while (true) {
            foreach ($cates as $key => $cate) {
                if ($cate['id'] == $pid) {
                    $pid = $cate['pid'];
                    array_unshift($res, $cate);    //将父分类插入到数组第一个元素前
                }
            }
            if ($pid == 0) {
                break;
            }
        }
        return $res;
    }
}